home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / RESOURCE / RESOURCE.C next >
C/C++ Source or Header  |  1990-12-16  |  3KB  |  145 lines

  1. /*****
  2.  *    Resources.c
  3.  *
  4.  *     Example of how to load resources from an external file and
  5.  *    keep a handle to them in memory!
  6.  *
  7.  *    by Joe Zobkiw
  8.  *    AFA Zobkiw @ America Online
  9.  *
  10.  *****/
  11.  
  12. #include "Resources.h"
  13.  
  14. main()
  15. {
  16.     int            appResFile = 0;
  17.     int            fileRefNum = 0;
  18.     Handle        theExternalCursor = 0L;
  19.  
  20.     /* you should know this by now! */
  21.     InitMacintosh();
  22.     
  23.     /* show our about box */
  24.     Alert(ABOUT_ALRT,0L);
  25.     
  26.     /* get the application's refnum */
  27.     appResFile = CurResFile();
  28.     CheckResError();
  29.     
  30.     /* open the external file, the easy way */
  31.     fileRefNum = OpenResFile(EXTERNAL_FILENAME);
  32.     if (fileRefNum == -1) {
  33.         SysBeep(0);
  34.         ExitToShell();
  35.     }
  36.     CheckResError();
  37.     
  38.     /* grab a handle to the cursor from the external file */
  39.     theExternalCursor = GetResource('CURS',EXTERNAL_CURS_ID);
  40.     CheckResError();
  41.     
  42.     /* detach the resource so when we close the file it doesn't */
  43.     /* get blasted into oblivion */
  44.     DetachResource(theExternalCursor);
  45.     CheckResError();
  46.     
  47.     /* close the external file */
  48.     CloseResFile(fileRefNum);
  49.     CheckResError();
  50.     
  51.     /* set our application back to be the current resource file */
  52.     UseResFile(appResFile);
  53.     CheckResError();
  54.     
  55.     /* this is where memory munging and all sorts of exciting things  */
  56.     /* might happen before we are ever ready to use the resource that */
  57.     /* we just loaded.                                                  */
  58.     
  59.     /* make sure the cursor is loaded into memory, */
  60.     /* it may have gotten biffed! */
  61.     LoadResource(theExternalCursor);
  62.     CheckResError();
  63.     
  64.     /* now set the cursor to the external resource */
  65.     SetCursor((CursHandle)*theExternalCursor);
  66.     while (! Button() ) { ; }
  67.     
  68.     /* flush the mouseclick and init the cursor */
  69.     FlushEvents(everyEvent,0);
  70.     InitCursor();    
  71. }
  72.  
  73. /********************************************************
  74.  *
  75.  *    check ResError and alert the user if error
  76.  *
  77.  ********************************************************/
  78. CheckResError()
  79. {
  80.     int    error;
  81.     
  82.     error = ResError();
  83.     
  84.     if (error != noErr) {
  85.         switch(error) {
  86.             resNotFound:
  87.                 DoAlert("\presNotFound - Resource not found.",error);
  88.                 break;    
  89.             resFNotFound:
  90.                 DoAlert("\presFNotFound - Resource file not found.",error);
  91.                 break;    
  92.             default:
  93.                 DoAlert("\pUnknown error",error);
  94.                 break;    
  95.         }
  96.         
  97.         ExitToShell();
  98.     }
  99. }
  100.  
  101. /********************************************************
  102.  *
  103.  *    initialize the Macintosh
  104.  *
  105.  ********************************************************/
  106. InitMacintosh()
  107. {
  108.     InitGraf(&thePort);
  109.     InitFonts();
  110.     FlushEvents(everyEvent,0);
  111.     InitWindows();
  112.     InitMenus();
  113.     TEInit();
  114.     InitDialogs(0L);
  115.     InitCursor();
  116. }
  117.  
  118. /********************************************************
  119.  *
  120.  *    show an error alert
  121.  *
  122.  ********************************************************/
  123. DoAlert(char *theString, int errID)
  124. {
  125.     char *theErrID;
  126.     
  127.     NumToString(errID,theErrID);
  128.     ParamText(theString,theErrID,0L,0L);
  129.     Alert(ALRT_ID, 0L);
  130. }
  131.  
  132. /********************************************************
  133.  *
  134.  *    set the cursor to cursorID
  135.  *
  136.  ********************************************************/
  137. SetMyCursor( cursorID )
  138. int    cursorID;
  139. {
  140.     CursHandle        theCursor;
  141.     
  142.     theCursor = GetCursor(cursorID);
  143.     SetCursor(*theCursor);
  144. }
  145.